初めてのAmazon TranslateとAWS CLIでの利用方法
Amazon Translateとは
AWSが提供する機械学習により高品質の翻訳を提供するサービスです。2018年10月現在、13言語(英語と他12言語)に対応しています。
- 英語
- アラビア語
- 簡体字中国語
- 繁体字中国語
- チェコ語
- フランス語
- ドイツ語
- イタリア語
- 日本語
- ポルトガル語
- ロシア語
- スペイン語
- トルコ語
Amazon Translateのニューラルネットワークは英語を各言語に翻訳、あるいは各言語を英語に翻訳するようにトレーニングされています。つまりソースとなる言語は一度英語に翻訳され、その英語をターゲット言語に翻訳と、2回翻訳処理が発生します...だったのですが、10月29日の以下のアップデートで、英語を介さずに直接翻訳される言語ペアが増えました。
ソースとなるテキストはUTF-8形式で、出力されるテキストもUTF-8です。
ソース言語は指定することも出来ますし、自動で検出させることも出来ます。自動検出はAmazon Comprehendによって実現しています。それぞれの言語を指定するためのコードは以下の通りです。
Language | Code |
アラビア語 | ar |
簡体字中国語 | zh |
繁体字中国語 | zh-TW |
チェコ語 | cs |
英語 | en |
フランス語 | fr |
ドイツ語 | de |
イタリア語 | it |
日本語 | ja |
ポルトガル語 | pt |
ロシア語 | ru |
スペイン語 | es |
トルコ語 | tr |
Amazon TranslateはAPIで提供されており、AWS CLIまたはAWS SDKを使うことで簡単に利用出来ます。2018年10月現在、Amazon Translateが利用出来るリージョンはバージニア(us-east-1)、オハイオ(us-east-2)、オレゴン(us-west-2)、アイルランド(eu-west-1)、GovCloudの5つです。
AWS CLIでAmazon Translateを使ってみる
今回はバージニアリージョンを使ってみます。ソース言語は日本語、ターゲット言語は英語を指定しています。
$ aws translate translate-text \ --region us-east-1 \ --source-language-code "ja" \ --target-language-code "en" \ --text "オラわくわくしてきたぞ"
結果は以下の通り。
{ "TargetLanguageCode": "en", "TranslatedText": "I'm so excited about this.", "SourceLanguageCode": "ja" }
ターゲットを英語以外にしてみます。ドイツ語を指定してみました。
$ aws translate translate-text \ --region us-east-1 \ --source-language-code "ja" \ --target-language-code "de" \ --text "オラわくわくしてきたぞ"
結果は以下の通り。
{ "TargetLanguageCode": "de", "TranslatedText": "Ich bin so aufgeregt.", "SourceLanguageCode": "ja" }
ソース言語を自動検出させてみます。この場合、--source-language-codeにautoを指定します。
$ aws translate translate-text \ --region us-east-1 \ --source-language-code "auto" \ --target-language-code "ja" \ --text "Ich bin so aufgeregt."
結果。SourceLanguageCodeがdeとなっていますので、自動検出に成功しています。
{ "TargetLanguageCode": "ja", "TranslatedText": "興奮してる", "SourceLanguageCode": "de" }
対応していない言語を使ってみます。今回は韓国語にしてみました。
$ aws translate translate-text \ --region us-east-1 \ --source-language-code "auto" \ --target-language-code "ja" \ --text "나는 이것에 너무 흥분한다."
結果は以下の通り。韓国語(ko)であることは検出した上で、サポートされていないソース言語である、という例外(UnsupportedLanguagePairException)が返りました。
An error occurred (UnsupportedLanguagePairException) when calling the TranslateText operation: Unsupported language pair: ko to ja Autodetected source language code 'ko' is not supported. Use a supported source language code if you believe the input text is in that language.
ソース言語を自動検出にして、複数の言語を混ぜてみます。
$ aws translate translate-text \ --region us-east-1 \ --source-language-code "auto" \ --target-language-code "ja" \ --text "I'm so aufgeregt about これ."
結果は以下の通り。ソース言語は日本語(ja)ではないかと自動検出しましたが、信頼性が低い、という例外(DetectedLanguageLowConfidenceException)が返りました。
An error occurred (DetectedLanguageLowConfidenceException) when calling the TranslateText operation: Translate request rejected due to low confidence of auto detected source language 'ja'. Specify a valid source language code to force translation.
さて、ここまではコマンドラインに文字列を追加していましたが、今度はjsonファイルを使って翻訳してみます。以下のようなjsonファイルを用意します。
{ "Text": "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。", "SourceLanguageCode": "ja", "TargetLanguageCode": "en" }
AWS CLIで--cli-input-jsonを指定して実行します。
$ aws translate translate-text \ --region us-east-1 \ --cli-input-json file://translate.json > translated.json
結果は以下の通り。
$ cat translated.json { "TargetLanguageCode": "en", "TranslatedText": "I am a cat. I have no name yet. I have no idea where I was born. I only remembered that I was crying meow in a dim and bully place.", "SourceLanguageCode": "ja" }
まとめ
以下のことがわかりました。
- ソース言語は指定することも自動検出させることも可能。
- ソース言語がサポート対象外言語だと例外が発生する。
- ソース言語が自動検出出来ない、あるいは自動検出結果の精度が低いと、例外が発生する。
- 文字列を指定することもjsonファイルを指定することも可能。
次回はもっと複雑な使い方をしてみたいと思います。